package br.com.pucrs.tcc.bd;

import java.util.ArrayList;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.com.pucrs.tcc.ed.Aluno;
import br.com.pucrs.tcc.ed.Professor;
import br.com.pucrs.tcc.ed.Usuario;
import br.com.pucrs.tcc.enumerator.TipoUsuarioEnum;
import br.com.pucrs.tcc.util.hibernate.HibernateUtil;

public class UsuarioBD {
	
	private Session mSession;
	
	public UsuarioBD (Session session) {
		mSession = session;
	}
	
	public void inclui (Usuario usuario) {
		mSession.saveOrUpdate(usuario);
		mSession.flush();
	}
	
	public void alterar(Usuario usuario) {
		mSession.update(usuario);
		mSession.flush();
	}
	
	public void delete(Usuario usuario) {
		mSession.delete(usuario);
		mSession.flush();
	}
	
	public Usuario retrieve(Usuario usuario) {
		Usuario usuarioRetorno = null;
		
		usuarioRetorno = (Usuario) mSession.load(Usuario.class, usuario.getMatricula());	

		return usuarioRetorno;
	}
	
	public boolean verificaDisponivel(String matricula) {
		StringBuilder sql = new StringBuilder();

		sql.append(" SELECT u.* ");
		sql.append("   FROM usuarios u");
		sql.append("  WHERE u.matricula = ?");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.setString(0, matricula);
		
		return (query.list().size() <= 0);
	}

	public ArrayList<Usuario> listaCoordenadores() {
		return lista(TipoUsuarioEnum.COORDENADOR);
	}
	
	private ArrayList<Usuario> lista(TipoUsuarioEnum tipoUsuario) {
		ArrayList<Usuario> listaRetorno = null;

		Criteria criteria = mSession.createCriteria(Usuario.class);
		criteria.add(Restrictions.eq("tipo", tipoUsuario.getCodigo()));
		
		listaRetorno = (ArrayList<Usuario>) criteria.list();
		
		return listaRetorno;
	}


	


}
